package com.ljh.aiplatform.manager;


import com.ljh.aiplatform.common.ErrorCode;
import com.ljh.aiplatform.exception.ThrowUtils;
import org.redisson.api.RRateLimiter;
import org.redisson.api.RateIntervalUnit;
import org.redisson.api.RateType;
import org.redisson.api.RedissonClient;
import org.springframework.stereotype.Component;

import javax.annotation.Resource;

@Component
public class RedisLimitManager {

    @Resource
    private RedissonClient redissonClient;

    public void doRateLimit(String key){
        RRateLimiter rateLimiter = redissonClient.getRateLimiter(key);
        //1:第一个参数表示接受请求的类型  RateType.OVERALL表示全接受
        //2:第二个参数表示每秒接受请求的次数
        //3:第三个参数表示时间间隔
        //4:第四个参数表示时间间隔单位
        rateLimiter.trySetRate(RateType.OVERALL,2,1, RateIntervalUnit.SECONDS);
        final boolean flag = rateLimiter.tryAcquire(1);
        ThrowUtils.throwIf(!flag, ErrorCode.OVER_REQUEST,"请求过于频繁");
    }

}
